Ext.define( 'ES.lib.Ajax' ,   
{ forceActiveX:false,   
  createXhrObject:function(transactionId)   
        {   
            var obj,http;   
            try   
            {   
                   
        if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");}   
           
                http = new XMLHttpRequest();   
   
                obj = { conn:http, tId:transactionId };   
            }   
            catch(e)   
            {   
                for (var i = 0; i < this.activeX.length; ++i) {   
                    try   
                    {   
   
                        http = new ActiveXObject(this.activeX[i]);   
   
                        obj = { conn:http, tId:transactionId };   
                        break;   
                    }   
                    catch(e) {   
                    }   
                }   
            }   
            finally   
            {   
                return obj;   
            }   
        },   
        getHttpStatus: function(reqObj){   
           
            var statObj = {  status:0   
                    ,statusText:''   
                    ,isError:false   
                    ,isLocal:false   
                    ,isOK:false };   
            try {   
                if(!reqObj)throw('noobj');   
                statObj.status = reqObj.status || 0;   
                   
                statObj.isLocal = !reqObj.status && location.protocol == "file:" ||    
                           Ext.isSafari && reqObj.status == undefined;   
                       
                statObj.statusText = reqObj.statusText || '';    
                   
                statObj.isOK = (statObj.isLocal ||    
                        (statObj.status > 199 && statObj.status < 300) ||   
                         statObj.status == 304);   
                   
            } catch(e){ statObj.isError = true;} //status may not avail/valid yet.    
               
            return statObj;    
           
        },   
        handleTransactionResponse:function(o, callback, isAbort)   
        {   
   
        var responseObject;   
           
        callback = callback || {};   
           
        o.status = this.getHttpStatus(o.conn);   
                   
         if(!o.status.isError){   
            /* create and enhance the response with proper status and XMLDOM if necessary */   
            responseObject = this.createResponseObject(o, callback.argument);   
         }   
                
         if(o.status.isError){ /* checked again in case exception was raised - ActiveX was disabled during XML-DOM creation? */   
           responseObject = this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false));   
         }   
   
         if (o.status.isOK && !o.status.isError) {   
            if (callback.success) {   
                if (!callback.scope) {   
                    callback.success(responseObject);   
                }   
                else {   
                    callback.success.apply(callback.scope, [responseObject]);   
                }   
            }   
          } else {   
   
            if (callback.failure) {   
                if (!callback.scope) {   
                    callback.failure(responseObject);   
                }   
                else {   
                    callback.failure.apply(callback.scope, [responseObject]);   
                }   
            }   
   
         }   
   
        this.releaseObject(o);   
        responseObject = null;   
    },   
    createResponseObject:function(o, callbackArg)   
            {   
                var obj = {};   
                var headerObj = {};   
       
                try   
                {   
                    var headerStr = o.conn.getAllResponseHeaders();   
                    var header = headerStr.split('\n');   
                    for (var i = 0; i < header.length; i++) {   
                        var delimitPos = header[i].indexOf(':');   
                        if (delimitPos != -1) {   
                            headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);   
                        }   
                    }   
                }   
                catch(e) {   
                }   
       
                obj.tId = o.tId;   
                obj.status = o.status.status;   
                obj.statusText = o.status.statusText;   
                obj.getResponseHeader = headerObj;   
                obj.getAllResponseHeaders = headerStr;   
                obj.responseText = o.conn.responseText;   
                obj.responseXML = o.conn.responseXML;   
   
                if(o.status.isLocal){   
                          
                       o.status.isOK = ((obj.status = o.status.status = (!!obj.responseText.length)?200:404) == 200);   
                          
                       if(o.status.isOK && (!obj.responseXML || obj.responseXML.childNodes.length == 0)){   
   
                var xdoc=null;   
                try{   //ActiveX may be disabled    
                    if(typeof(DOMParser) == 'undefined'){    
                        xdoc=new ActiveXObject("Microsoft.XMLDOM");    
                        xdoc.async="false";   
                        xdoc.loadXML(obj.responseText);    
                    }else{    
                        var domParser = new DOMParser();    
                        xdoc = domParser.parseFromString(obj.responseText, 'application/xml');    
                        domParser = null;   
                    }   
                } catch(ex){    
                    o.status.isError = true;    
                       
                    }   
   
                obj.responseXML = xdoc;   
   
                if ( xdoc && typeof (obj.getResponseHeader['Content-Type']) == 'undefined' &&    
                    !!xdoc.childNodes.length )    /* Got valid nodes? then set the response header */   
                    {   
                        obj.getResponseHeader['Content-Type'] == 'text/xml';   
   
                    }   
   
               }   
                  
            }      
                   
                
                if (typeof callbackArg !== undefined) {   
                    obj.argument = callbackArg;   
                }   
       
                return obj;   
        },   
   
        asyncRequest:function(method, uri, callback, postData)   
        {   
            var o = this.getConnectionObject();   
   
            if (!o) {   
                return null;   
            }   
            else {   
                try{   
            o.conn.open(method, uri, true);   
        } catch(ex){   
               
            this.handleTransactionResponse(o, callback);   
            return o;   
        }   
   
        if (this.useDefaultXhrHeader) {   
            if (!this.defaultHeaders['X-Requested-With']) {   
            this.initHeader('X-Requested-With', this.defaultXhrHeader, true);   
            }   
        }   
   
        if(postData && this.useDefaultHeader){   
            this.initHeader('Content-Type', this.defaultPostHeader);   
        }   
   
         if (this.hasDefaultHeaders || this.hasHeaders) {   
            this.setHeader(o);   
        }   
   
        this.handleReadyState(o, callback);   
           
        try{ o.conn.send(postData || null);   
        } catch(ex){ this.handleTransactionResponse(o, callback);}   
               
        return o;   
            }   
        }});   
       
     ES.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');/* or other true/false mechanism */